package com.htpay.util;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;

public class ToolUtil {
    /**
     * 判断是否包含大小写字母及数字且在8-12位
     *
     * @param str
     * @return
     */
    public static boolean isLetterDigit(String str) {
        boolean isDigit = false;//定义一个boolean值，用来表示是否包含数字
        boolean isLetter = false;//定义一个boolean值，用来表示是否包含字母
        for (int i = 0; i < str.length(); i++) {
            if (Character.isDigit(str.charAt(i))) {   //用char包装类中的判断数字的方法判断每一个字符
                isDigit = true;
            } else if (Character.isLetter(str.charAt(i))) {  //用char包装类中的判断字母的方法判断每一个字符
                isLetter = true;
            }
        }
        String regex = "^[a-zA-Z0-9]{8,12}$";
        boolean isRight = isDigit && isLetter && str.matches(regex);
        return isRight;
    }

    /**
     * 固定长度的数字字符串判断
     *
     * @param str
     * @param length
     * @return
     */
    public static boolean isDigitFixedLength(String str, int length) {
        boolean isDigit = true;
        for (int i = 0; i < str.length(); i++) {
            if (!Character.isDigit(str.charAt(i))) {
                isDigit = false;
                break;
            }
        }
        //n位数字
        String regex = "^[0-9]{" + length + "," + length + "}$";
        return isDigit && str.matches(regex);
    }

    /**
     * url参数分隔：按照 &
     *
     * @param parameters
     * @return
     * @throws UnsupportedEncodingException
     */
    public static Map<String, String> urlParamsSplit(String parameters) throws UnsupportedEncodingException {
        Map<String, String> mapRequest = new HashMap<String, String>();
        String[] arrSplit = null;
        if (parameters == null) {
            return mapRequest;
        }
        //解码
        parameters = URLDecoder.decode(parameters, "GBK");
        //按照&号分隔
        arrSplit = parameters.split("[&]");
        for (String strSplit : arrSplit) {
            String[] arrSplitEqual = null;
            arrSplitEqual = strSplit.split("[=]");
            //解析出键值
            if (arrSplitEqual.length > 1) {
                //正确解析
                mapRequest.put(arrSplitEqual[0], arrSplitEqual[1]);
            } else {
                if (arrSplitEqual[0] != "") {
                    //只有参数没有值，不加入
                    mapRequest.put(arrSplitEqual[0], "");
                }
            }
        }
        return mapRequest;
    }
}
